﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;

namespace Classes
{
    public class AltaVehiculo
    {
        private Vehiculo vehiculo;

        public Vehiculo Vehiculo
        {
            get { return vehiculo; }
            set { vehiculo = value; }
        }
        public  AltaVehiculo(DBVehiculos dbVehiculos, DBEquipos dbEquipos)
        {
            string patente;
            string chasis;
            string nroMotor;
            string marca;
            string modelo;
            string fabricacion;

            Console.Clear();

            //if (CancelarOperacion() == false)
            //{
                Console.Clear();

                do
                {
                    Console.Write(" Ingrese la Patente sin espacios (AAANNN): ");
                    patente = Console.ReadLine();

                }
                while (!ValidarPatente(patente));


                do
                {
                    Console.Write(" Ingrese Chasis: ");
                    chasis = Console.ReadLine();
                }
                while (!(ValidarCadenaIngresada(chasis)));

                do
                {
                    Console.Write(" Ingrese Numero de Motor: ");
                    nroMotor = Console.ReadLine();

                }
                while (!(ValidarCadenaIngresada(nroMotor)));


                do
                {
                    Console.Write(" Ingrese Marca: ");
                    marca = Console.ReadLine();
                }
                while (!(ValidarCadenaIngresada(marca)));

                do
                {
                    Console.Write(" Ingrese Modelo: ");
                    modelo = Console.ReadLine();
                }
                while (!(ValidarCadenaIngresada(modelo)));


                fabricacion = "";
                do
                {
                    Console.Write(" Ingrese Fecha de fabricacion: ");
                    fabricacion = Console.ReadLine();
                }
                while (ValidarFecha(fabricacion) == false);


                vehiculo = new Vehiculo(patente, chasis, nroMotor, marca, modelo, DateTime.Parse(fabricacion), new Scoring("DesInicial", 1));

                InstalarEquipo ie = new InstalarEquipo(dbEquipos);

                vehiculo.InstalarEquipo(ie.GetEquipoCreado());
                
                if (Guardar(vehiculo, dbVehiculos))
                {
                    
                    Console.WriteLine("VEHICULO GUARDADO EXITOSAMENTE");
                }
                else
                    Console.WriteLine("NO SE PUDO REALIZAR LA OPERACION");
                Console.ReadKey();
            //}
            //else
            //{
            //    Console.Clear();
            //    Console.WriteLine(" (X) OPERACION CANCELADA ");
            //}

            //Console.WriteLine("Si desea visualizar los vehiculos existentes ??? Presione (S)i, (N)o");
            
            //if (PreguntaSiNo())
            //    dbVehiculos.MostrarListaVehiculos();
        }

        public bool ValidarCadenaIngresada(string cadena)
        {
            if ((cadena.Length) == 0)
            {
                Console.Clear();
                Console.WriteLine(" NO HA INGRESADO NINGUN VALOR ");
                return false;
            }
            return true;
        }
    
        public bool ValidarFecha(String fabricacion)
        {
            try
            {
                if (DateTime.Parse(fabricacion) == DateTime.MinValue)
                {
                    Console.Clear();
                    Console.WriteLine(" DEBE INGRESAR UNA FECHA VALIDA (dd-mm-aaaa)");
                    return false;
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(" DEBE INGRESAR UNA FECHA VALIDA (dd-mm-aaaa)");
                return false;
            }

            return true;
        }

        //public bool CancelarOperacion()
        //{
        //    Console.Write("Desea Cancelar Operacion? (S)i, (N)o ");

        //    if (PreguntaSiNo())
        //        return true;
        //    return false;
        //}

        public bool ValidarPatente(string patente)
        {
            if (Regex.Match(patente, @"^[A-Z][A-Z][A-Z]|[a-z][a-z][a-z][0-9][0-9][0-9]$").Success)
                return true;
            else
            {
                Console.WriteLine(" LA PATENTE INGRESADA ES INCORRECTA, POR FAVOR INGRESE UNA PATENTE VALIDA");
                return false;
            }
        }

        public Boolean Guardar(Vehiculo v, DBVehiculos dbVehiculos)
        {
            if (!(dbVehiculos.VehiculoExistente(v)))
            {
                dbVehiculos.AgregarVehiculo(v);
                return true;
            }

            Console.Clear();
            Console.WriteLine("El vehiculo que intenta cargar ya existe en la base de datos");
            Console.ReadKey();
            return false;
        }

        public Boolean PreguntaSiNo()
        {
            ConsoleKeyInfo tecla;
            string resultado;

            do
            {
                tecla = Console.ReadKey(true);
                resultado = tecla.KeyChar.ToString();
            }
            while (!(resultado == "S" || resultado == "s" || resultado == "N" || resultado == "n"));

            if (resultado == "S" || resultado == "s")
                return true;
            return false;
        }
    }
}


